package com.dhl.rabbitmq.three;

import com.dhl.rabbitmq.utils.RabbitUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;

import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 手动应答进行确认
 * 生产者端(测试消息手动应答,消息不丢失，重新放回消息队列)
 * @title: Task2
 * @Author danghailiang
 * @Date: 2022/6/10 8:54
 * @Version 1.0
 */
public class Task2 {
    /**
     * 队列名称
     */
    public static final String TASK_QUEUE_NAME = "ask_name";

    public static void main(String[] args) throws Exception {
        // 获取信道
        Channel channel = RabbitUtils.getChannel();
        /**
         * 生成一个队列
         * 1. 队列名称
         * 2. durable:队列里面的消失是否持久化(磁盘)
         * 3. exclusive:该队列是否只供一个消费者进行消费，是否进行消息共享，true可以多个消费者消费
         * 4. autoDelete:否是自动删除，最后一个消费者端断开连接以后，该队列是否自动删除，true自动删除，false不自动删除
         * 5. 其他参数，暂时不用
         */
        //创建队列，要求持久化
        boolean durable = true;
        channel.queueDeclare(TASK_QUEUE_NAME,durable,false,false,null);
        Scanner scanner = new Scanner(System.in);
        // 循环发送
        while (scanner.hasNext()){
            String message = scanner.nextLine();
            /**
             * 发送一个消费者
             * 1. 发送到哪个交换机
             * 2. 路由的Key是哪个，本次是队列名称
             * 3. 其他参数信息，暂时为null
             * 4. 发送的消息的消息体(二进制消息)
             */
            // 设置生产者，发送的消息持久化 MessageProperties.PERSISTENT_TEXT_PLAIN 保存到磁盘上
            channel.basicPublish("",TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes(StandardCharsets.UTF_8));
            System.out.println("生产者发出消息" + message);
        }

    }
}
